// 装饰器工厂
// 装饰器工厂是一个返回装饰器函数的函数，可以为装饰器添加参数，可以更灵活的控制装饰器的行为。

// 需求：定义一个LogInfo类装饰器工厂，实现person实例可以调用到printInfo方法，
// 且printInfo中输出的内容的次数，由logInfo接收的参数决定
type info = new (...args:any[])=>{}
function logInfo(n:number){
    // 这里return的才是真正的装饰器
    return function(target:info){
        target.prototype.printInfo = function(){
            for (let i = 0; i < n; i++) {
                console.log(`我的名字是:${this.name},我的年龄是:${this.age}`);
            }
        }
    }
}
@logInfo(3)
class Person514 {
    constructor(
        public name:string,
        public age:number,
    ){}
    speak(){
        console.log('你好，夜南漫剪');
        
    }
}
interface Person514 {
    printInfo():void
}
const p514 = new Person514('夜南漫剪',26)
p514.printInfo()